home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
boot
/
czesc_2
/
wiconify
/
wutilities.lzh
/
wMakeWB
/
wMakeWB.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-04-19
|
4KB
|
163 lines
/*
* WMAKEWB A companion utility to wIconify that allows you to
* specify any screen as the current Workbench screen.
*
* Copyright 1990 by Davide P. Cervone, all rights reserved.
* You may use this code, provided this copyright notice is kept intact.
*/
#define INTUITION_PREFERENCES_H /* don't need 'em */
#include <intuition/intuitionbase.h>
#define USAGE "wMakeWB [screen]"
static char *program = "wMakeWB";
static char *version = "v1.2";
static char *copyright =
"Copyright (C) 1990 by Davide P. Cervone, all rights reserved.";
#define INTUITION_REV 0L
extern struct IntuitionBase *IntuitionBase;
extern struct IntuitionBase *OpenLibrary();
#define TOUPPER(c) (((c)>='a'&&(c)<='z')?(c)-'a'+'A':c)
/*
* PrefixMatch()
*
* Case-insensitive prefix match. NULL pointers and empty strings
* only match themselves, and are not considered prefixes to any string.
*
* Return <0 if the first is smaller than the second,
* =0 if the first is a prefix of the second,
* >1 if the first is larger than the second.
*/
int PrefixMatch(s1,s2)
char *s1,*s2;
{
int match = -1;
if (s1 && *s1)
{
if (s2)
{
while (TOUPPER(*s1) == TOUPPER(*s2) && *s2 != 0) s1++,s2++;
if (*s1 == 0) match = 0; else match = *s1 - *s2;
} else match = 1;
} else if (s2 == NULL || *s1 == 0) match = 0;
return(match);
}
/*
* *FindScreen()
*
* Lock IntuitionBase so nothing happens while we look.
* If there is a name to look for,
* Start at the first screen, and look for a screen whose title
* matches the given name. If none, return NULL.
* Otherwise, use the active screen.
* Unlock Intuition.
* Return the screen pointer found, if any.
*/
static struct Screen *FindScreen(ScreenName)
char *ScreenName;
{
struct Screen *theScreen;
long ILock, LockIBase();
ILock = LockIBase(0L);
if (ScreenName)
{
theScreen = IntuitionBase->FirstScreen;
while (theScreen && PrefixMatch(ScreenName,theScreen->Title))
theScreen = theScreen->NextScreen;
} else {
theScreen = IntuitionBase->ActiveScreen;
}
UnlockIBase(ILock);
return(theScreen);
}
/*
* Print()
*
* Find the standard AmigaDOS output file and write the output string
* to the output file. This is intended as a substitute for printf()
* when no formatting is required, and when you want a small executable.
*/
static void Print(s)
char *s;
{
ULONG OutFile;
extern ULONG Output();
OutFile = Output();
if (OutFile && s) Write(OutFile,s,strlen(s));
}
/*
* Error()
*
* Print the character string, and up to two optional strings, then
* go to a new output line, close Intuition, and exit with an error.
*/
static void Error(s,x1,x2)
char *s,*x1,*x2;
{
Print(s);
if (x1) Print(x1);
if (x2) Print(x2);
Print("\n");
if (IntuitionBase) CloseLibrary(IntuitionBase);
_exit(10L);
}
/*
* main()
*
* If there are too many arguments, print the Usage message.
* If a screen name is given, use it.
* Open Intuition; if successful,
* Find the specified screen.
* If found, then
* If wIconify is running, make the screen the WB screen.
* Otherwise say that wIconify is not running.
* Otherwise say that the screen can't be found.
* Close Intuition.
* Otherwise say that Intuition can't be openned.
*/
void main(argc,argv)
int argc;
char *argv[];
{
char *ScreenName = NULL;
struct Screen *theScreen;
if (argc > 2) Error("Usage: ",USAGE,NULL);
if (argc > 1 && argv[1]) ScreenName = argv[1];
IntuitionBase = OpenLibrary("intuition.library",INTUITION_REV);
if (IntuitionBase)
{
theScreen = FindScreen(ScreenName);
if (theScreen)
{
if (wIconifyActive()) wMakeWB(theScreen);
else Error("wIconify not running or incompatible version",NULL,NULL);
} else Error("Can't find screen '",ScreenName,"'");
CloseLibrary(IntuitionBase);
} else Error("Can't Open Intuition Library!",NULL,NULL);
}